home *** CD-ROM | disk | FTP | other *** search
/ Merciful 1 / Merciful - Disc 1.iso / software / a / asm_one / asm-onev1.25d.dms / in.adf / Replays / NOISE-Fastreplay.S < prev    next >
Encoding:
Text File  |  1993-03-08  |  8.7 KB  |  522 lines

  1. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  2. ;­             Driver                 ­
  3. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  4.  
  5. S:    BSR    MT_INIT
  6.  
  7. S1:    CMPI.B    #$80        ,$DFF006
  8.     BNE.S    S1
  9.     MOVE.W    #$0FFF        ,$DFF180
  10.     BSR    MT_MUSIC
  11.     MOVE.W    #$0000        ,$DFF180
  12.     CMPI.B    #$3D        ,$BFEC01
  13.     BNE    S1
  14.     BSR    MT_END
  15.     RTS
  16.  
  17. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  18. ;­     NoisetrackerV2.0 FASTreplay      ­
  19. ;­  Uses lev6irq - takes 8 rasterlines  ­
  20. ;­ Do not disable Master irq in $dff09a ­
  21. ;­ Used registers: d0-d3/a0-a7|    =INTENA ­
  22. ;­  Mahoney & Kaktus - (C) E.A.S. 1990  ­
  23. ;­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­­
  24.  
  25. mt_data=$58000
  26.  
  27. mt_init:lea    mt_data,a0
  28.     lea    mt_mulu(pc),a1
  29.     move.l    #mt_data+$c,d0
  30.     moveq    #$1f,d1
  31.     moveq    #$1e,d3
  32. mt_lop4:move.l    d0,(a1)+
  33.     add.l    d3,d0
  34.     dbf    d1,mt_lop4
  35.  
  36.     lea    $3b8(a0),a1
  37.     moveq    #$7f,d0
  38.     moveq    #0,d1
  39.     moveq    #0,d2
  40. mt_lop2:move.b    (a1)+,d1
  41.     cmp.b    d2,d1
  42.     ble.s    mt_lop
  43.     move.l    d1,d2
  44. mt_lop:    dbf    d0,mt_lop2
  45.     addq.w    #1,d2
  46.  
  47.     asl.l    #8,d2
  48.     asl.l    #2,d2
  49.     lea    4(a1,d2.l),a2
  50.     lea    mt_samplestarts(pc),a1
  51.     add.w    #$2a,a0
  52.     moveq    #$1e,d0
  53. mt_lop3:clr.l    (a2)
  54.     move.l    a2,(a1)+
  55.     moveq    #0,d1
  56.     move.b    d1,2(a0)
  57.     move.w    (a0),d1
  58.     asl.l    #1,d1
  59.     add.l    d1,a2
  60.     add.l    d3,a0
  61.     dbf    d0,mt_lop3
  62.  
  63.     move.l    $78.w,mt_oldirq-mt_samplestarts-$7c(a1)
  64.     or.b    #2,$bfe001
  65.     move.b    #6,mt_speed-mt_samplestarts-$7c(a1)
  66.     moveq    #0,d0
  67.     lea    $dff000,a0
  68.     move.w    d0,$a8(a0)
  69.     move.w    d0,$b8(a0)
  70.     move.w    d0,$c8(a0)
  71.     move.w    d0,$d8(a0)
  72.     move.b    d0,mt_songpos-mt_samplestarts-$7c(a1)
  73.     move.b    d0,mt_counter-mt_samplestarts-$7c(a1)
  74.     move.w    d0,mt_pattpos-mt_samplestarts-$7c(a1)
  75.     rts
  76.  
  77.  
  78. mt_end:    moveq    #0,d0
  79.     lea    $dff000,a0
  80.     move.w    d0,$a8(a0)
  81.     move.w    d0,$b8(a0)
  82.     move.w    d0,$c8(a0)
  83.     move.w    d0,$d8(a0)
  84.     move.w    #$f,$dff096
  85.     rts
  86.  
  87.  
  88. mt_music:
  89.     lea    mt_data,a0
  90.     lea    mt_voice1(pc),a4
  91.     addq.b    #1,mt_counter-mt_voice1(a4)
  92.     move.b    mt_counter(pc),d0
  93.     cmp.b    mt_speed(pc),d0
  94.     blt    mt_nonew
  95.     moveq    #0,d0
  96.     move.b    d0,mt_counter-mt_voice1(a4)
  97.     move.w    d0,mt_dmacon-mt_voice1(a4)
  98.     lea    mt_data,a0
  99.     lea    $3b8(a0),a2
  100.     lea    $43c(a0),a0
  101.  
  102.     moveq    #0,d1
  103.     move.b    mt_songpos(pc),d0
  104.     move.b    (a2,d0.w),d1
  105.     lsl.w    #8,d1
  106.     lsl.w    #2,d1
  107.     add.w    mt_pattpos(pc),d1
  108.  
  109.     lea    $dff0a0,a5
  110.     lea    mt_samplestarts-4(pc),a1
  111.     lea    mt_playvoice(pc),a6
  112.     jsr    (a6)
  113.     addq.l    #4,d1
  114.     lea    $dff0b0,a5
  115.     lea    mt_voice2(pc),a4
  116.     jsr    (a6)
  117.     addq.l    #4,d1
  118.     lea    $dff0c0,a5
  119.     lea    mt_voice3(pc),a4
  120.     jsr    (a6)
  121.     addq.l    #4,d1
  122.     lea    $dff0d0,a5
  123.     lea    mt_voice4(pc),a4
  124.     jsr    (a6)
  125.  
  126.     move.w    mt_dmacon(pc),d0
  127.     beq.s    mt_nodma
  128.  
  129.     lea    $bfd000,a3
  130.     move.b    #$7f,$d00(a3)
  131.     move.w    #$2000,$dff09c
  132.     move.w    #$a000,$dff09a
  133.     move.l    #mt_irq1,$78.w
  134.     moveq    #0,d0
  135.     move.b    d0,$e00(a3)
  136.     move.b    #$a8,$400(a3)
  137.     move.b    d0,$500(a3)
  138.     or.w    #$8000,mt_dmacon-mt_voice4(a4)
  139.     move.b    #$11,$e00(a3)
  140.     move.b    #$81,$d00(a3)
  141.  
  142. mt_nodma:
  143.     add.w    #$10,mt_pattpos-mt_voice4(a4)
  144.     cmp.w    #$400,mt_pattpos-mt_voice4(a4)
  145.     bne.s    mt_exit
  146. mt_next:clr.w    mt_pattpos-mt_voice4(a4)
  147.     clr.b    mt_break-mt_voice4(a4)
  148.     addq.b    #1,mt_songpos-mt_voice4(a4)
  149.     and.b    #$7f,mt_songpos-mt_voice4(a4)
  150.     move.b    -2(a2),d0
  151.     cmp.b    mt_songpos(pc),d0
  152.     bne.s    mt_exit
  153.     move.b    -1(a2),mt_songpos-mt_voice4(a4)
  154. mt_exit:tst.b    mt_break-mt_voice4(a4)
  155.     bne.s    mt_next
  156.     rts
  157.  
  158. mt_nonew:
  159.     lea    $dff0a0,a5
  160.     lea    mt_com(pc),a6
  161.     jsr    (a6)
  162.     lea    mt_voice2(pc),a4
  163.     lea    $dff0b0,a5
  164.     jsr    (a6)
  165.     lea    mt_voice3(pc),a4
  166.     lea    $dff0c0,a5
  167.     jsr    (a6)
  168.     lea    mt_voice4(pc),a4
  169.     lea    $dff0d0,a5
  170.     jsr    (a6)
  171.     tst.b    mt_break-mt_voice4(a4)
  172.     bne.s    mt_next
  173.     rts
  174.  
  175. mt_irq1:tst.b    $bfdd00
  176.     move.w    mt_dmacon(pc),$dff096
  177.     move.l    #mt_irq2,$78.w
  178.     move.w    #$2000,$dff09c
  179.     rte
  180.  
  181. mt_irq2:tst.b    $bfdd00
  182.     movem.l    a3/a4,-(a7)
  183.     lea    mt_voice1(pc),a4
  184.     lea    $dff000,a3
  185.     move.l    $a(a4),$a0(a3)
  186.     move.w    $e(a4),$a4(a3)
  187.     move.l    $a+$1c(a4),$b0(a3)
  188.     move.w    $e+$1c(a4),$b4(a3)
  189.     move.l    $a+$38(a4),$c0(a3)
  190.     move.w    $e+$38(a4),$c4(a3)
  191.     move.l    $a+$54(a4),$d0(a3)
  192.     move.w    $e+$54(a4),$d4(a3)
  193.     movem.l    (a7)+,a3/a4
  194.     move.b    #0,$bfde00
  195.     move.b    #$7f,$bfdd00
  196.     move.l    mt_oldirq(pc),$78.w
  197.     move.w    #$2000,$dff09c
  198.     move.w    #$2000,$dff09a
  199.     rte
  200.  
  201. mt_playvoice:
  202.     move.l    (a0,d1.l),(a4)
  203.     moveq    #0,d2
  204.     move.b    2(a4),d2
  205.     lsr.b    #4,d2
  206.     move.b    (a4),d0
  207.     and.b    #$f0,d0
  208.     or.b    d0,d2
  209.     beq    mt_oldinstr
  210.  
  211.     asl.w    #2,d2
  212.     move.l    (a1,d2.l),4(a4)
  213.     move.l    mt_mulu(pc,d2.w),a3
  214.     move.w    (a3)+,8(a4)
  215.     move.w    (a3)+,$12(a4)
  216.     move.l    4(a4),d0
  217.     moveq    #0,d3
  218.     move.w    (a3)+,d3
  219.     beq    mt_noloop
  220.     asl.w    #1,d3
  221.     add.l    d3,d0
  222.     move.l    d0,$a(a4)
  223.     move.w    -2(a3),d0
  224.     add.w    (a3),d0
  225.     move.w    d0,8(a4)
  226.     bra    mt_hejaSverige
  227.  
  228. mt_mulu:blk.l    $20,0
  229.  
  230. mt_noloop:
  231.     add.l    d3,d0
  232.     move.l    d0,$a(a4)
  233. mt_hejaSverige:
  234.     move.w    (a3),$e(a4)
  235.     move.w    $12(a4),8(a5)
  236.  
  237. mt_oldinstr:
  238.     move.w    (a4),d3
  239.     and.w    #$fff,d3
  240.     beq    mt_com2
  241.     tst.w    8(a4)
  242.     beq.s    mt_stopsound
  243.     move.b    2(a4),d0
  244.     and.b    #$f,d0
  245.     cmp.b    #5,d0
  246.     beq.s    mt_setport
  247.     cmp.b    #3,d0
  248.     beq.s    mt_setport
  249.  
  250.     move.w    d3,$10(a4)
  251.     move.w    $1a(a4),$dff096
  252.     clr.b    $19(a4)
  253.  
  254.     move.l    4(a4),(a5)
  255.     move.w    8(a4),4(a5)
  256.     move.w    $10(a4),6(a5)
  257.  
  258.     move.w    $1a(a4),d0
  259.     or.w    d0,mt_dmacon-mt_playvoice(a6)
  260.     bra    mt_com2
  261.  
  262. mt_stopsound:
  263.     move.w    $1a(a4),$dff096
  264.     bra    mt_com2
  265.  
  266. mt_setport:
  267.     move.w    (a4),d2
  268.     and.w    #$fff,d2
  269.     move.w    d2,$16(a4)
  270.     move.w    $10(a4),d0
  271.     clr.b    $14(a4)
  272.     cmp.w    d0,d2
  273.     beq.s    mt_clrport
  274.     bge    mt_com2
  275.     move.b    #1,$14(a4)
  276.     bra    mt_com2
  277. mt_clrport:
  278.     clr.w    $16(a4)
  279.     rts
  280.  
  281. mt_port:moveq    #0,d0
  282.     move.b    3(a4),d2
  283.     beq.s    mt_port2
  284.     move.b    d2,$15(a4)
  285.     move.b    d0,3(a4)
  286. mt_port2:
  287.     tst.w    $16(a4)
  288.     beq.s    mt_rts
  289.     move.b    $15(a4),d0
  290.     tst.b    $14(a4)
  291.     bne.s    mt_sub
  292.     add.w    d0,$10(a4)
  293.     move.w    $16(a4),d0
  294.     cmp.w    $10(a4),d0
  295.     bgt.s    mt_portok
  296.     move.w    $16(a4),$10(a4)
  297.     clr.w    $16(a4)
  298. mt_portok:
  299.     move.w    $10(a4),6(a5)
  300. mt_rts:    rts
  301.  
  302. mt_sub:    sub.w    d0,$10(a4)
  303.     move.w    $16(a4),d0
  304.     cmp.w    $10(a4),d0
  305.     blt.s    mt_portok
  306.     move.w    $16(a4),$10(a4)
  307.     clr.w    $16(a4)
  308.     move.w    $10(a4),6(a5)
  309.     rts
  310.  
  311. mt_sin:
  312. dc.b $00,$18,$31,$4a,$61,$78,$8d,$a1,$b4,$c5,$d4,$e0,$eb,$f4,$fa,$fd
  313. dc.b $ff,$fd,$fa,$f4,$eb,$e0,$d4,$c5,$b4,$a1,$8d,$78,$61,$4a,$31,$18
  314.  
  315. mt_vib:    move.b    $3(a4),d0
  316.     beq.s    mt_vib2
  317.     move.b    d0,$18(a4)
  318.  
  319. mt_vib2:move.b    $19(a4),d0
  320.     lsr.w    #2,d0
  321.     and.w    #$1f,d0
  322.     moveq    #0,d2
  323.     move.b    mt_sin(pc,d0.w),d2
  324.     move.b    $18(a4),d0
  325.     and.w    #$f,d0
  326.     mulu    d0,d2
  327.     lsr.w    #7,d2
  328.     move.w    $10(a4),d0
  329.     tst.b    $19(a4)
  330.     bmi.s    mt_vibsub
  331.     add.w    d2,d0
  332.     bra.s    mt_vib3
  333. mt_vibsub:
  334.     sub.w    d2,d0
  335. mt_vib3:move.w    d0,6(a5)
  336.     move.b    $18(a4),d0
  337.     lsr.w    #2,d0
  338.     and.w    #$3c,d0
  339.     add.b    d0,$19(a4)
  340.     rts
  341.  
  342.  
  343. mt_arplist:
  344. dc.b 0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1,2,0,1
  345.  
  346. mt_arp:    moveq    #0,d0
  347.     move.b    mt_counter(pc),d0
  348.     move.b    mt_arplist(pc,d0.w),d0
  349.     beq.s    mt_normper
  350.     cmp.b    #2,d0
  351.     beq.s    mt_arp2
  352. mt_arp1:move.b    3(a4),d0
  353.     lsr.w    #4,d0
  354.     bra.s    mt_arpdo
  355. mt_arp2:move.b    3(a4),d0
  356.     and.w    #$f,d0
  357. mt_arpdo:
  358.     asl.w    #1,d0
  359.     move.w    $10(a4),d1
  360.     lea    mt_periods(pc),a0
  361. mt_arp3:cmp.w    (a0)+,d1
  362.     blt.s    mt_arp3
  363.     move.w    -2(a0,d0.w),6(a5)
  364.     rts
  365.  
  366. mt_normper:
  367.     move.w    $10(a4),6(a5)
  368.     rts
  369.  
  370. mt_com:    move.w    2(a4),d0
  371.     and.w    #$fff,d0
  372.     beq.s    mt_normper
  373.     move.b    2(a4),d0
  374.     and.b    #$f,d0
  375.     beq.s    mt_arp
  376.     cmp.b    #6,d0
  377.     beq.s    mt_volvib
  378.     cmp.b    #4,d0
  379.     beq    mt_vib
  380.     cmp.b    #5,d0
  381.     beq.s    mt_volport
  382.     cmp.b    #3,d0
  383.     beq    mt_port
  384.     cmp.b    #1,d0
  385.     beq.s    mt_portup
  386.     cmp.b    #2,d0
  387.     beq.s    mt_portdown
  388.     move.w    $10(a4),6(a5)
  389.     cmp.b    #$a,d0
  390.     beq.s    mt_volslide
  391.     rts
  392.  
  393. mt_portup:
  394.     moveq    #0,d0
  395.     move.b    3(a4),d0
  396.     sub.w    d0,$10(a4)
  397.     move.w    $10(a4),d0
  398.     cmp.w    #$71,d0
  399.     bpl.s    mt_portup2
  400.     move.w    #$71,$10(a4)
  401. mt_portup2:
  402.     move.w    $10(a4),6(a5)
  403.     rts
  404.  
  405. mt_portdown:
  406.     moveq    #0,d0
  407.     move.b    3(a4),d0
  408.     add.w    d0,$10(a4)
  409.     move.w    $10(a4),d0
  410.     cmp.w    #$358,d0
  411.     bmi.s    mt_portdown2
  412.     move.w    #$358,$10(a4)
  413. mt_portdown2:
  414.     move.w    $10(a4),6(a5)
  415.     rts
  416.  
  417. mt_volvib:
  418.      bsr    mt_vib2
  419.      bra.s    mt_volslide
  420. mt_volport:
  421.      bsr    mt_port2
  422.  
  423. mt_volslide:
  424.     moveq    #0,d0
  425.     move.b    3(a4),d0
  426.     lsr.b    #4,d0
  427.     beq.s    mt_vol3
  428.     add.b    d0,$13(a4)
  429.     cmp.b    #$40,$13(a4)
  430.     bmi.s    mt_vol2
  431.     move.b    #$40,$13(a4)
  432. mt_vol2:move.w    $12(a4),8(a5)
  433.     rts
  434.  
  435. mt_vol3:move.b    3(a4),d0
  436.     and.b    #$f,d0
  437.     sub.b    d0,$13(a4)
  438.     bpl.s    mt_vol4
  439.     clr.b    $13(a4)
  440. mt_vol4:move.w    $12(a4),8(a5)
  441.     rts
  442.  
  443. mt_com2:move.b    2(a4),d0
  444.     and.b    #$f,d0
  445.     beq    mt_rts
  446.     cmp.b    #$e,d0
  447.     beq.s    mt_filter
  448.     cmp.b    #$d,d0
  449.     beq.s    mt_pattbreak
  450.     cmp.b    #$b,d0
  451.     beq.s    mt_songjmp
  452.     cmp.b    #$c,d0
  453.     beq.s    mt_setvol
  454.     cmp.b    #$f,d0
  455.     beq.s    mt_setspeed
  456.     rts
  457.  
  458. mt_filter:
  459.     move.b    3(a4),d0
  460.     and.b    #1,d0
  461.     asl.b    #1,d0
  462.     and.b    #$fd,$bfe001
  463.     or.b    d0,$bfe001
  464.     rts
  465.  
  466. mt_pattbreak:
  467.     move.b    #1,mt_break-mt_playvoice(a6)
  468.     rts
  469.  
  470. mt_songjmp:
  471.     move.b    #1,mt_break-mt_playvoice(a6)
  472.     move.b    3(a4),d0
  473.     subq.b    #1,d0
  474.     move.b    d0,mt_songpos-mt_playvoice(a6)
  475.     rts
  476.  
  477. mt_setvol:
  478.     cmp.b    #$40,3(a4)
  479.     bls.s    mt_sv2
  480.     move.b    #$40,3(a4)
  481. mt_sv2:    moveq    #0,d0
  482.     move.b    3(a4),d0
  483.     move.b    d0,$13(a4)
  484.     move.w    d0,8(a5)
  485.     rts
  486.  
  487. mt_setspeed:
  488.     moveq    #0,d0
  489.     move.b    3(a4),d0
  490.     cmp.b    #$1f,d0
  491.     bls.s    mt_sp2
  492.     moveq    #$1f,d0
  493. mt_sp2:    tst.w    d0
  494.     bne.s    mt_sp3
  495.     moveq    #1,d0
  496. mt_sp3:    move.b    d0,mt_speed-mt_playvoice(a6)
  497.     rts
  498.  
  499. mt_periods:
  500. dc.w $0358,$0328,$02fa,$02d0,$02a6,$0280,$025c,$023a,$021a,$01fc,$01e0
  501. dc.w $01c5,$01ac,$0194,$017d,$0168,$0153,$0140,$012e,$011d,$010d,$00fe
  502. dc.w $00f0,$00e2,$00d6,$00ca,$00be,$00b4,$00aa,$00a0,$0097,$008f,$0087
  503. dc.w $007f,$0078,$0071,$0000
  504.  
  505. mt_speed:    dc.b    6
  506. mt_counter:    dc.b    0
  507. mt_pattpos:    dc.w    0
  508. mt_songpos:    dc.b    0
  509. mt_break:    dc.b    0
  510. mt_dmacon:    dc.w    0
  511. mt_samplestarts:blk.l    $1f,0
  512. mt_voice1:    blk.w    13,0
  513.         dc.w    1
  514. mt_voice2:    blk.w    13,0
  515.         dc.w    2
  516. mt_voice3:    blk.w    13,0
  517.         dc.w    4
  518. mt_voice4:    blk.w    13,0
  519.         dc.w    8
  520. mt_oldirq:    dc.l    0
  521.  
  522.